#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

const int N = 1010;

int n;
double d;

struct node
{
	double l, r;
}a[N];

bool cmp(node x, node y)
{
	return x.l < y.l;
}

int main()
{
	int cnt = 0;
	//针对每一个岛屿，算出在 x 轴哪段区域可以覆盖这个点
	while(cin >> n >> d, n && d)
	{
		cnt++;
		bool flag = false;
		for(int i = 1; i <= n; i++)
		{
			double x, y; cin >> x >> y;
			if(y > d) flag = true;
			double l = sqrt(d * d - y * y);
			a[i].l = x - l; a[i].r = x + l;
		}

		cout << "Case " << cnt << ": ";
		if(flag) cout << -1 << endl;
		else 
		{
			//1.先根据左端点排序，互相重叠的区间是连续的
			sort(a + 1, a + 1 + n, cmp);
			
			//2.在所有的区间中，找出互相重叠的一共有多少组
			int ret = 1;
			double r = a[1].r;
			for(int i = 2; i <= n; i++)
			{
				double left = a[i].l, right = a[i].r;
				if(left <= r)//当两个区间重叠时，应该用右端点较小的区间，继续向后找
				{
					
					r = min(right, r);
				}
				else //不重叠时，以下一个区间为基准，继续向后找
				{
					ret++;
					r = right;
				}
			}
			cout << ret << endl;
		}
	}

	return 0;
}

